import pyautogui
import time
import os


def run_automation_task(g_key_wait_time=2, confidence_level=0.8, esc_key_wait_time=1):
    """
    执行自动化点击和按键操作。
    此函数可以单独运行，也可以被其他文件引用。

    Args:
        g_key_wait_time (int/float): 按下 'g' 键后等待页面加载的时间（秒）。
        confidence_level (float): 模板匹配的精确度（0.0 到 1.0 之间）。
        esc_key_wait_time (int/float): 按下 'esc' 键后等待操作完成的时间（秒）。
    """
    print("自动化程序开始...")

    try:
        # 获取当前脚本的目录
        current_script_dir = os.path.dirname(os.path.abspath(__file__))

        # 构建模板图片文件夹的完整路径
        # 假设脚本在 'src' 目录下，且 'templates' 文件夹是脚本的同级目录
        templates_dir = os.path.join(current_script_dir, 'templates')

        # 构建 collect.png 图片的完整路径
        collect_image_path = os.path.join(templates_dir, 'collect.png')

        # 1. 按下键盘上的 'g' 键
        print("按下 'g' 键...")
        pyautogui.press('g')
        time.sleep(g_key_wait_time)  # 等待页面加载

        # 2. 使用模板匹配技术在新页面中查找 collect.png 的位置并点击
        # 使用完整的图片路径进行匹配
        collect_button_location = pyautogui.locateOnScreen(collect_image_path, confidence=confidence_level)

        if collect_button_location:
            print(f"找到 '{collect_image_path}'，位置: {collect_button_location}")
            # 计算图片中心点
            center_x = collect_button_location.left + collect_button_location.width / 2
            center_y = collect_button_location.top + collect_button_location.height / 2
            pyautogui.click(center_x, center_y)
            print("点击了 'collect.png' 所在位置。")
            time.sleep(esc_key_wait_time)  # 等待点击操作完成
            pyautogui.click(center_x, center_y)
        else:
            print(f"未找到 '{collect_image_path}'。请确保图片文件存在且在屏幕上可见。")
            # 如果未找到图片，可以选择抛出异常或返回 False 表示失败
            return False

        # 3. 按下第一个 'esc' 键
        print("按下第一个 'esc' 键...")
        pyautogui.press('esc')
        time.sleep(esc_key_wait_time)  # 等待操作完成

        # 4. 再次按下 'esc' 键
        print("再次按下 'esc' 键...")
        pyautogui.press('esc')
        time.sleep(esc_key_wait_time)  # 等待操作完成

        print("自动化程序执行完毕。")
        return True  # 表示自动化任务成功完成

    except pyautogui.FailSafeException:
        print("程序被用户中止 (鼠标移动到屏幕角落)。")
        return False
    except Exception as e:
        print(f"发生错误: {e}")
        return False


# --- 程序入口点 ---
if __name__ == "__main__":
    # 当脚本作为主程序直接运行时，执行以下代码
    print("程序将在 2 秒后开始，请切换到目标窗口...")
    time.sleep(2)

    # 调用封装好的函数，并可以使用默认参数或传入自定义参数
    if run_automation_task():
        print("主程序执行成功。")
    else:
        print("主程序执行失败或被中断。")